Android by José Enrique Amaro Soriano
autor:José Enrique Amaro Soriano
La lengua: spa
Format: epub
Tags: Divulgación, Tecnología
publicado: 2011-10-18T22:00:00+00:00
Figura 14.2. Diálogos de Progreso Horizontal y Giratorio.
14.3. Interfaz Runnable
Existe otro procedimiento alternativo para crear un hilo. Consiste en definir una clase que implemente la interfaz Runnable. Esto requiere definir el método run(), que se ejecutará al iniciarse el hilo mediante:
Thread hilo= new Thread(runnable};
hilo.start();
donde runnable es un objeto de la clase que implementa la interfaz Runnable. La ventaja de este procedimiento en lugar de extender la clase Thread, como hemos hecho en este capÃtulo, es que cualquier clase puede implementar un interfaz. En particular puede ser una clase que a la vez extienda a la clase View y que podemos insertar en un layout. Asà podemos tener varios objetos de tipo View en la pantalla, cada uno asociado a instrucciones que se están ejecutando en su propio hilo. Otra ventaja es que no es necesario utilizar un controlador, pues el contenido de estos objetos View puede ser actualizada continuamente usando el método postInvalidate() de la clase View. Este método hace que se vuelva a dibujar el contenido de un objeto View, ejecutándose el método onDraw()(en este caso no se puede usar invalidate() para dibujar de nuevo, porque este método sólo se puede utilizar en el hilo principal y no en hilos secundarios.)
En el siguiente ejemplo usamos esta técnica para actualizar dos contadores en dos hilos independientes. Cada hilo consiste en un objeto de la clase TextoAnimado que extiende a View y que hemos definido como clase interna. Cada hilo tiene un contador cuyo valor se incrementa con un retraso y se muestra en pantalla. Estos objetos View se añadirán al layout definido en el siguiente fichero main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#ffffff"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout"
>
<TextView
android:id="@+id/texto"
android:textColor="#000000"
android:textSize="35sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Interfaz Runnable"
/>
</LinearLayout>
El programa Java, donde definimos la actividad RunnableEjemplo, es el siguiente. Los dos contadores son los elementos de un array. Los parámetros de los objetos TextoAnimado son, además de la clase actual this, el retraso temporal y el Ãndice del contador (0,1).
package es.ugr.amaro.runnableejemplo;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
public class RunnableEjemplo extends Activity {
boolean continuar=true;
String mensaje="";
int[] contador={0,0};
TextoAnimado texto,texto2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout ll=(LinearLayout)
findViewById(R.id.layout);
LayoutParams params=new LayoutParams(600,100);
texto= new TextoAnimado(this,40,0);
texto.setLayoutParams(params);
ll.addView(texto);
texto2= new TextoAnimado(this,200,1);
texto2.setLayoutParams(params);
texto2.setBackgroundColor(Color.YELLOW);
ll.addView(texto2);
Thread hilo= new Thread(texto);
hilo.start();
Thread hilo2= new Thread(texto2);
hilo2.start();
}
class TextoAnimado extends View implements Runnable{
int retraso;
int i;
Paint paint=new Paint();
public TextoAnimado(Context context,int retraso,int i) {
super(context);
this.retraso=retraso;
this.i=i;
paint.setColor(Color.BLACK);
paint.setTextSize(30);
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawText(mensaje,50,50,paint);
}
public void run() {
while(continuar){
try{Thread.sleep(retraso);}
catch(InterruptedException e){;}
contador[i]++;
mensaje="Contador: "+contador[i];
postInvalidate();
}
}
}
}
descargar
Este sitio no almacena ningún archivo en su servidor. Solo indexamos y enlazamos. Contenido proporcionado por otros sitios. Póngase en contacto con los proveedores de contenido para eliminar el contenido de derechos de autor, si corresponde, y envíenos un correo electrónico. Inmediatamente eliminaremos los enlaces o contenidos relevantes.
Ciencias informáticas | Ciencias sociales |
Ciencia y matemáticas | Comunicación y periodismo |
Derecho | Educación |
Humanidades | Ingeniería |
Medicina y ciencias de la salud | Negocios y finanzas |
La mejor ciencia ficción by AA. VV(1092)
Papel creativo 6 | Cartonaje y encuadernación by Autora Ada Muñoz(1040)
El amante by A. Martin(1037)
La doctrina del shock by Naomi Klein(980)
Homo Deus by Yuval Noah Harari(951)
Elon Musk by Ashlee Vance(941)
'48 by James Herbert(926)
9786077627548 by Sánchez Carlos Cuauhtémoc(886)
Snowden by Glenn Greenwald(882)
Factfulness by Hans Rosling(875)
Haz clic aquí para matarlos a todos by Bruce Schneier(857)
PUB0222685 by Unknown(853)
Universo 1 by AA. VV(845)
Steve Jobs by Walter Isaacson(825)
Historias de familia by Unknown(801)
Libro de estilo de El País by El País(791)
Los dueños de internet by Natalia Zuazo(775)
Futuros 1 by AA. VV(752)
Historia de las matemáticas by Ian Stewart(749)